package Day_0201.JUC;

/**
 * @author zxc
 * @date 2023/02/01 22:09
 **/
public class Multithreading {
    public static void main(String[] args) {
        /**
         * 多线程的好处
         * ===》
         * 1.发挥多核CPU的优势
         * （1）单核CPU上所谓的"多线程"那是假的多线程，同一时间处理器只会处理一段逻辑，只不过线程之间切换得比较快，看着像多个线程"同时"运行罢了。
         * （2）多核CPU上的多线程才是真正的多线程，它能让你的多段逻辑同时工作，多线程，可以真正发挥出多核CPU的优势来，达到充分利用CPU的目的。
         * ===》
         * 总结 ：
         * （1）单核CPU运行的多线程，同一时间处理器只会处理一段逻辑;只是由于线程之间切换较快，看似像多线程;
         * （2）多核CPU运行的多线程，能够使得多段逻辑同时运行;
         *
         * 2.防止阻塞
         * （1）从程序运行效率的角度来看，单核CPU不但不会发挥出多线程的优势，反而会因为在单核CPU上运行多线程导致线程上下文的切换，而降低程序整体的效率。
         * ===> 但是单核CPU我们还是要应用多线程，就是为了防止阻塞。
         * 试想，如果单核CPU使用单线程，那么只要这个线程阻塞了，比方说远程读取某个数据吧，对端迟迟未返回又没有设置超时时间，
         * 那么你的整个程序在数据返回回来之前就停止运行了。
         * （2）多线程可以防止这个问题，多条线程同时运行，哪怕一条线程的代码执行读取数据阻塞，也不会影响其它任务的执行。
         * ===》
         * 总结 ：
         * （1）单核CPU也要运行多线程程序，尽管单核CPU运行多线程程序，会导致线程上下文频繁切换，但是会防止程序发生阻塞;
         * （2）多线程程序，会使得多条线程同时运行，避免某个线程阻塞导致其影响其他任务的执行;
         *
         * 3.便于建模
         * 假设有一个大的任务A，单线程编程，那么就要考虑很多，建立整个程序模型比较麻烦。
         * 但是如果把这个大的任务A分解成几个小任务，任务B、任务C、任务D，分别建立程序模型，并通过多线程分别运行这几个任务。
         * ===>
         * 总结 ：
         * 即，大问题拆分成小问题，分别对于每个小问题建立模型;
         *
         */
    }
}
